package org.jeecg.modules.pd.util;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang.StringUtils;
import org.jeecg.common.util.DateUtils;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.pd.entity.PdBillNoRule;
import org.jeecg.modules.pd.service.impl.PdBillNoRuleServiceImpl;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

/**
 * @Author: zxh
 * @Date: 2020年1月2日11:16:11
 */
public class UUIDUtil {

	/**SpringContextUtils.getBean
	 * 获取uuid
	 * @return
	 */
	public static String  getUuid(){
		return UUID.randomUUID().toString().replace("-", "");
	}


	/**
	 * 根据单号首字母类型生成单号
	 * @return
	 */
	public static String generateOrderNoByType(String type){
		StringBuffer sb = new StringBuffer();
		//首字母
		sb.append(type);
		//时间戳
		sb.append(getCurrentTimeNum());
		//随机数
		sb.append(randomInt(3));
		return sb.toString();
	}

	/**
	 * 根据单号首字母类型生成单号，单据号后5位是递增整数
	 * @param type
	 * @return
	 */
	public static String generateOrderNoByTypeNew(String type){
		StringBuffer sb = new StringBuffer();
		//首字母
		sb.append(type);
		//时间戳
		sb.append(DateUtils.getDate("yyyyMMdd"));
		//递增5位数
		PdBillNoRuleServiceImpl impl = (PdBillNoRuleServiceImpl) SpringContextUtils.getBean("pdBillNoRuleServiceImpl");
		String value = impl.getNextVal(type);
		if(StringUtils.isNotBlank(value)){
			if(value.equals("100000")){
				value = "1";
				//更新表 value = 1  循环从1开始
				PdBillNoRule updateRule = new PdBillNoRule();
				updateRule.setType(type);
				updateRule.setValue(value);
				impl.updateValueByType(updateRule);
			}
			switch(value.length()){
				case 1 :
					value = "0000"+ value;
					break;
				case 2 :
					value = "000"+ value;
					break;
				case 3 :
					value = "00"+ value;
					break;
				case 4 :
					value = "0"+ value;
					break;
				case 5 :
					value = value;
					break;
			}
		}
		sb.append(value);
		return sb.toString();
	}

	//获取时间精确到毫秒
	public static String getCurrentTimeNum(){
		return DateUtils.getDate("yyMMddHHmmss");
	}


	/**
	 * 随机生成你设定长度为n的数字字符串
	 * @return
	 */
	public static String randomInt(int n){
		if(n == 0 || n < 0){
			return null;
		}
		StringBuilder sb = new StringBuilder();
		Random random = new Random();
		for(int i = 0; i < n; i++){
			sb.append(String.valueOf(random.nextInt(10)));
		}
		return sb.toString();
	}

	/**
	 * 生成编号：前缀+当前时间（精确到毫秒）
	 * */
	public static String generateNumber(String prefix){
		String format = new SimpleDateFormat("yyyyMMddHHmmssSSS") .format(new Date() );
		String number = prefix+format;
		return number;
	}
}
